#Copyright 2012 César Serrano López
#This program is free software: you can redistribute it and/or modify it 
#under the terms of the GNU General Public License as published by the 
#Free Software Foundation, either version 3 of the License, or (at your
#option) any later version.

#This program is distributed in the hope that it will be useful, but
#WITHOUT ANY WARRANTY; without even the implied warranty of 
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
#Public License for more details.
#You should have received a copy of the GNU General Public License along 
#with this program. If not, see <http://www.gnu.org/licenses/>
package DAO;
use Alumno;
use Moose;
use warnings;
use v5.10;
use lib qw(lib);
use File::Slurp qw(read_file);
use DBI;
 
 has 'alumnosBean', is=>'ro',isa=>'Alumno';
 
 #-i dni nombre apellido edad curso
 sub Guardar(){
 
    my $self = shift;
	my $Alumno;
	my $dni;
    my $nombre;
    my $apellido;
    my $edad;
    my $curso;
    my $dbh;
	my $rc;

	if(@_){
		
		 $self->{'alumnosBean'} = shift(@_);	
		 $Alumno = $self->{'alumnosBean'};
		 $dni = $Alumno->Dni();
		 $nombre = $Alumno->Nombre();
		 $apellido = $Alumno->Apellido();
		 $edad = $Alumno->Edad();
		 $curso = $Alumno->Curso();	
	}
	 
	 $dbh = DBI->connect("dbi:SQLite:dbname=datos.sqlite","","");
	 	          
	 $dbh->do("
	             INSERT INTO  alumnos  VALUES(
	                                         '$dni',	                                         
	                                         $curso	                                         
	                                     );
	          ")or die "Error al insertar en tabla alumnos. ".$dbh->errstr;
	          
	 $dbh->do("
			 INSERT INTO  personas  VALUES(
										 '$dni',
										 '$nombre',
										 '$apellido',
										 $edad
										 
									 );
		  ")or die "Error al insertar en tabla personas. ".$dbh->errstr;        
	                                      
      $rc = $dbh->disconnect();
      
      print "-Exito al insertar Alumno-"
 }
 
 #-c
 sub CrearTablas(){
	 
	 #Borramos las tablas y las volvemos a crear
	 
	 my $dbh;
	 my $rc;
	 
	 $dbh = DBI->connect("dbi:SQLite:dbname=datos.sqlite","","");
	 
	 $dbh->do("
	             CREATE  TABLE alumnos (
	                                     dni VARCHAR PRIMARY KEY  NOT NULL,
	                                     curso INTEGER NOT NULL
	                                     );
	          ")or die "Error al crear tabla alumnos. ".$dbh->errstr;
	          
	 $dbh->do("
	             CREATE  TABLE personas (
	                                     dni VARCHAR PRIMARY KEY  NOT NULL ,
	                                     nombre VARCHAR NOT NULL ,	                                      
	                                     apellido VARCHAR NOT NULL,
	                                     edad INTEGER NOT NULL
	                                     );
	          ")or die "Error al crear tabla personas. ".$dbh->errstr;
	                                      
      $rc = $dbh->disconnect();
      
      print "-Exito al crear tablas-"
}

 #-r
 sub Reiniciar(){
	
	 my $dbh;
	 my $rc;
	 my $this = shift;
	 
		 $dbh = DBI->connect("dbi:SQLite:dbname=datos.sqlite","","");
		 
		 $dbh->do("
					DROP TABLE alumnos;
					 
				  ")or die "Error al crear tabla alumnos.".$dbh->errstr;
				  
		 $dbh->do("
					DROP TABLE personas;
					
				  ")or die "Error al crear tabla personas.".$dbh->errstr;
											  
		 $rc = $dbh->disconnect();
		 
     
     $this->CrearTablas();
     print "-Exito al reiniciar tablas-"
}
 
 #-v
 sub MostrarTodos(){

 	#Listamos todos los alumnos de la base de datos.    
	my $Alumno;
	my $dni;
    my $nombre;
    my $apellido;
    my $edad;
    my $curso;
    my $dbh;
	my $rc;
	    
	$dbh = DBI->connect("dbi:SQLite:dbname=datos.sqlite","","");
			
			my @resultado;
			my $ary1=$dbh->selectall_arrayref("
							  SELECT 
							         dni,
									 nombre,
									 apellido,
									 edad
							  FROM 
							         personas
			")or die "Error al conectar con la base de datos. ".$dbh->errstr; 
		   
            my $ary2=$dbh->selectall_arrayref("
							  SELECT 
							         dni,
									 curso
							  FROM 
							         alumnos
			")or die "Error al conectar con la base de datos. ".$dbh->errstr; 
		         
        my $tupla1;	
		my $tupla2;	
		for (my $i=0;$i<@$ary1;$i++) {	
			
			       $tupla1 = @$ary1[$i];
		           $tupla2 = @$ary2[$i];
		        
		        
					   $dni = @$tupla1[0]; 
					   $nombre = @$tupla1[1];
					   $apellido = @$tupla1[2];
					   $edad = @$tupla1[3];        		               
		               $curso = @$tupla2[1]; 
         
	     		   
	     		   my $string_alumno = $dni.",".$nombre.",".$apellido.",".$edad.",".$curso;
	     		   push(
                         @resultado,
                         $string_alumno
                   );
		}
	             
	 
	                                          
        $rc = $dbh->disconnect();
        return @resultado;
 }

 #-e
 sub Editar(){
 
    #abrirmos la conexion con la base de datos
    my $dbh = DBI->connect("dbi:SQLite:dbname=datos.sqlite","","");
   	
	   my $dni = $_[1];
	   my $atributo =  $_[2];
	   my $nuevoValor = $_[3];  
	   my $continuar = 0;
	   my $ary;	   
	  	  
	  if($atributo eq '-n' || $atributo eq '-a' ||$atributo eq '-e'){ 
	  
			 if($atributo eq '-n'){ $atributo='nombre'; $continuar=1;}	 
	         elsif($atributo eq '-a'){ $atributo='apellido'; $continuar=1;}   
		 	 elsif($atributo eq '-e'){ $atributo='edad'; $continuar=1;}   
		 	 
		 	 if($continuar == 1){
				 				 
			   $dbh->do("
									  UPDATE 
											personas
									  SET 
											$atributo = '$nuevoValor' 
									  WHERE 
											dni = '$dni'
					              ")or die "Error al conectar con la base de datos. ".$dbh->errstr; 
			 }
			 else{
				  print "Error: parámetro $atributo no esperado. \n"
				 }
	  }
	  elsif($atributo eq '-c'){
		
			 if($atributo eq '-c'){ $atributo='curso'; $continuar=1;}
			 
			 if($continuar == 1){
				 
								 my $ary1 = $dbh->do("
														  UPDATE 
																alumnos
														  SET 
																$atributo = $nuevoValor 
														  WHERE 
																dni = '$dni';
																
													  ")or die "Error al conectar con la base de datos. ".$dbh->errstr; 
			 }
			 else{
				  print "Error: parámetro $atributo no esperado. \n"
				 }			              
	         }		
				
		  #cerramos la conexión con la base de datos		
		  my $rc = $dbh->disconnect();	
	
} 

 #-b
 sub Buscar(){
	  
	#Busca alumno por el dni pasado por parametro.
	my $AlumnoABuscar=0;
	my $dni=$_[1];
    my $nombre;
    my $apellido;
    my $edad;
    my $curso;
    my $dbh;
	my $rc;
	    
	$dbh = DBI->connect("dbi:SQLite:dbname=datos.sqlite","","");
			
			my @resultado;
			my $ary1=$dbh->selectall_arrayref("
							  SELECT 
							         dni,
									 nombre,
									 apellido,
									 edad
							  FROM 
							         personas
							  WHERE
							         dni = '$dni'
			")or die "Error al conectar con la base de datos. ".$dbh->errstr; 
		   
            my $ary2=$dbh->selectall_arrayref("
							  SELECT 
							         dni,
									 curso
							  FROM 
							         alumnos
							  WHERE
							         dni = '$dni'
			")or die "Error al conectar con la base de datos. ".$dbh->errstr; 
		         
        my $tupla1;	
		my $tupla2;
			
			 
		for (my $i=0;$i<@$ary1;$i++) {	
			
			       $tupla1 = @$ary1[$i];
		           $tupla2 = @$ary2[$i];
		        
		        
					   $dni = @$tupla1[0]; 
					   $nombre = @$tupla1[1];
					   $apellido = @$tupla1[2];
					   $edad = @$tupla1[3];        		               
		               $curso = @$tupla2[1]; 
     	           
	     		   my $string_alumno = $dni.",".$nombre.",".$apellido.",".$edad.",".$curso;
	     		    
	     		    print "string alumno-> $string_alumno";
	     		    
	     		   push(
                         @resultado,
                         $string_alumno
                   );
                   
                    $AlumnoABuscar = new Alumno('dni'        => $dni,
									            'nombre'     => $nombre,
									            'apellido'   => $apellido,
									            'edad'       => $edad,			 
									            'curso'      => $curso);
	   }	                                          
        $rc = $dbh->disconnect();
        
         
        return $AlumnoABuscar;
 }

 #-x
 sub Borrar(){ 
     
    my $dni=$_[1];
    my $dbh;
	my $rc;
	    print "entrar a borrrar alumno con dni $dni";
	    
	$dbh = DBI->connect("dbi:SQLite:dbname=datos.sqlite","","");
			
			
			$dbh->do("
							  DELETE
							  FROM 
							         personas
							  WHERE
							         dni = '$dni'
			")or die "Error al conectar con la base de datos. ".$dbh->errstr; 
		   
            $dbh->do("
							  DELETE
							  FROM 
							         alumnos
							  WHERE
							         dni = '$dni'
			")or die "Error al conectar con la base de datos. ".$dbh->errstr; 
	             
	             print "esto es lo que hay en dbh $dbh";
	                                          
        $rc = $dbh->disconnect();
        
        return 1;
 }

#FIN
1;
